Skip to content

fix: add missing id/sessionID/messageID to MCP tool attachments#14345

Merged
rekram1-node merged 1 commit intoanomalyco:devfrom
NatChung:fix/mcp-tool-attachment-ids
Feb 20, 2026
Merged

fix: add missing id/sessionID/messageID to MCP tool attachments#14345
rekram1-node merged 1 commit intoanomalyco:devfrom
NatChung:fix/mcp-tool-attachment-ids

Conversation

@NatChung
Copy link
Contributor

@NatChung NatChung commented Feb 19, 2026

Issue for this PR

Closes #14355

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

MCP tool results (e.g. Playwright take_screenshot) return attachments without id, sessionID, and messageID fields. This causes Zod validation to fail on MessageV2.FilePart, and the tool result is silently lost.

Built-in tools already map attachments to include these fields (prompt.ts L808-814), but the MCP tool path (L874) explicitly omits them via Omit<MessageV2.FilePart, "id" | "sessionID" | "messageID">.

This patch applies the same .map() logic to MCP tool attachments, making both paths consistent.

Before: Playwright take_screenshot → image attachment missing id fields → Zod parse error → tool result lost
After: Playwright take_screenshot → image attachment has id fields → works like built-in tools

How did you verify your code works?

  • Used Playwright MCP take_screenshot tool — screenshot returns without Zod errors
  • Verified built-in tool attachments still work (e.g. read on an image file)
  • Confirmed MessageV2.FilePart Zod validation passes for MCP tool attachments

Screenshots / recordings

N/A — backend logic change, no UI affected.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

@github-actions github-actions bot added needs:compliance This means the issue will auto-close after 2 hours. needs:issue labels Feb 19, 2026
@github-actions
Copy link
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

MCP tool results (e.g. Playwright screenshots) return attachments
without id, sessionID, and messageID fields. This causes downstream
Zod validation to fail because MessageV2.FilePart requires these
fields.

Built-in tools already map attachments to include these fields
(line 808-814), but the MCP tool path (line 874) explicitly omits
them. This patch applies the same mapping to MCP tool attachments,
making both paths consistent.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@NatChung NatChung force-pushed the fix/mcp-tool-attachment-ids branch from 6669d35 to 440b0e8 Compare February 20, 2026 00:17
@github-actions github-actions bot removed needs:issue needs:compliance This means the issue will auto-close after 2 hours. labels Feb 20, 2026
@github-actions
Copy link
Contributor

Thanks for updating your PR! It now meets our contributing guidelines. 👍

@rekram1-node rekram1-node merged commit c9008b3 into anomalyco:dev Feb 20, 2026
10 of 11 checks passed
@NatChung NatChung deleted the fix/mcp-tool-attachment-ids branch February 20, 2026 00:44
lacymorrow added a commit to lacymorrow/lash that referenced this pull request Feb 22, 2026
* upstream/dev: (476 commits)
  release: v1.2.9
  fix: issue from structuredClone addition by using unwrap (anomalyco#14359)
  tweak(ui): adjust session feed spacing
  tweak(ui): tone down reasoning emphasis
  tweak(ui): refine session feed spacing
  fix(desktop): restore settings header mask
  tweak(ui): nudge edited files chevron
  tweak(ui): stabilize collapsible chevron hover
  fix: add missing id/sessionID/messageID to MCP tool attachments (anomalyco#14345)
  Use structuredClone instead of remeda's clone (anomalyco#14351)
  remove unnecessary deep clones from session loop and LLM stream (anomalyco#14354)
  fix(web): correct config import path in Korean enterprise docs
  docs: update providers layout and Windows sidebar label
  core: remove User-Agent header assertion from LLM test to fix failing test
  release: v1.2.8
  fix(app): black screen on launch with sidecar server
  chore: generate
  feat(opencode): support adaptive thinking for claude sonnet 4.6 (anomalyco#14283)
  feat(tui): add custom tool and mcp call responses visible and collapsable (anomalyco#10649)
  chore: cleanup
  ...

# Conflicts:
#	bun.lock
#	packages/app/package.json
#	packages/console/app/package.json
#	packages/console/core/package.json
#	packages/console/function/package.json
#	packages/console/mail/package.json
#	packages/desktop/package.json
#	packages/enterprise/package.json
#	packages/extensions/zed/extension.toml
#	packages/function/package.json
#	packages/opencode/package.json
#	packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
#	packages/opencode/src/cli/cmd/tui/routes/home.tsx
#	packages/opencode/src/config/config.ts
#	packages/opencode/src/tool/lsp.ts
#	packages/opencode/src/tool/read.ts
#	packages/plugin/package.json
#	packages/sdk/js/package.json
#	packages/slack/package.json
#	packages/ui/package.json
#	packages/util/package.json
#	packages/web/package.json
#	sdks/vscode/package.json
jonathanmiddleton pushed a commit to jonathanmiddleton/opencode that referenced this pull request Mar 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MCP tool attachments missing id/sessionID/messageID fields causes Zod validation failure

3 participants